﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson17 : MonoBehaviour
{
    public AudioSource audioS;
    private Texture tex;
    private Texture tex2;
    private Texture tex3;
    void Start()
    {
        #region 知识点一 Resources资源动态加载的作用
        //1.通过代码动态加载Resources文件夹下指定路径资源
        //2.避免繁琐的拖曳操作
        #endregion

        #region 知识点二 常用资源类型
        //1.预设体对象—Gameobject
        //2.音效文件—Audioclip
        //3.文本文件-TextAsset
        //4.图片文件—Texture
        //5.其它类型需要什么用什么类型

        //注意:
        //预设体对象加载需要实例化
        //其它资源加载一般直接用
        #endregion

        #region 知识点三 资源同步加载 普通方法
        //在一个工程当中 Resources文件夹 可以有多个 通过API加载时 会自动去这些同名的Resources的文件夹中找资源
        //打包时 Resources文件夹里的内容 会整合

        //1.预设体对象 想要创建在场景上 记住实例化
        //第一步：加载预设体
        Object obj1 = Resources.Load("Cube");
        //第二步：实例化
        Instantiate(obj1);

        Object obj2 = Resources.Load("Sphere");
        Instantiate(obj2);

        //2.音效资源
        //第一步：加载数据
        Object obj3 = Resources.Load("Music/BKMusic");
        //第二步：使用数据
        audioS.clip = obj3 as AudioClip;
        audioS.Play();

        //3.文本资源
        //文本资源支持的格式
        //.txt
        //.xml
        //.bytes
        //.json
        //.html
        //.csv
        //......
        TextAsset ta = Resources.Load("Txt/Test") as TextAsset;
        //文本内容
        Debug.LogFormat("ta text content:{0}", ta.text);
        //字节数据组
        Debug.LogFormat("text bytes:{0}", ta.bytes);

        //4.图片
        tex = Resources.Load("Tex/bk") as Texture;

        //5.其它类型 需要什么类型 就用什么类型就行

        //6.问题：资源同名怎么办?
        //Resources.Load 加载同名资源时 无法准确加载出你想要的内容。
        //由于Tex目录下有001.png和001.txt,下面的代码无法正确加载出想要的内容
        tex2 = Resources.Load("Tex/001") as Texture;

        //6-1、加载指定类型的资源
        //加载同目录001图片资源
        tex3 = Resources.Load("Tex/001", typeof(Texture)) as Texture;
        //加载同目录001文本资源
        TextAsset ta1 = Resources.Load("Tex/001", typeof(TextAsset)) as TextAsset;
        Debug.LogFormat("ta1 text content:{0}", ta1.text);

        //6-2、加载指定名字的所有资源
        Object[] objs = Resources.LoadAll("Tex/001");
        foreach (object item in objs)
        {
            if (item is Texture)
            {

            }
            else if (item is TextAsset)
            {

            }
        }
        #endregion

        #region 知识点四 资源同步加载 泛型方法
        //加载同目录指定图片
        tex3 = Resources.Load<Texture>("Tex/001");
        //加载同步指定文本
        TextAsset ta2 = Resources.Load<TextAsset>("Tex/001");
        Debug.LogFormat("ta2 text content:{0}", ta2.text);
        #endregion

        #region 总结
        //Resources动态加载资源的方法
        //让拓展性更强
        //相对拖曳来说 它更加一劳永逸 更加方便

        //重要知识点：
        //记住API
        //记住一些特定的格式
        //预设体加载出来一定要实例化
        #endregion
    }

    private void OnGUI()
    {
        //GUI.DrawTexture(new Rect(0,0,200,200), tex);
        if (tex2)
        {
            GUI.DrawTexture(new Rect(0, 0, 100, 100), tex2);
        }
        if (tex3)
        {
            GUI.DrawTexture(new Rect(100, 0, 100, 100), tex3);
        }
    }
}
